package com.vecspace.dayu.code.template.service;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.vecspace.database.model.PojoManager;
import com.vecspace.dayu.code.template.dao.CodeFragmentDao;
import com.vecspace.dayu.code.template.pojo.CodeFragment;
import com.vecspace.framework.sysdata.service.SysDataService;
import com.vecspace.utils.Assert;
import com.vecspace.utils.NumberUtil;

/**代码片段
 * 
 * @version 1.0
 * @author wanghua
 * @reviewer  
 * @createTime 2021年9月18日
 */
@Service("dayu_codeFragmentService")
public class CodeFragmentService {
	
	public CodeFragment getCodeFragment(Long id) throws Exception {
		return codeFragmentDao.getCodeFragment(id);
	}
	
	public CodeFragment saveWebCodeFragment(CodeFragment item, String loginUserId) throws Exception {
		if (item == null){
			return null;
		}
		/*** 下面开始对item对象的页面传值进行校验，如必填项，格式等 ***/
		//Assert.throwz(StringUtils.isNotBlank() , "条件不满足时抛出异常");
		/*** 结束校验 ***/
		
		CodeFragment item2;
		if (NumberUtil.isNotNullZero(item.getId())) {
			/**从数据库中取出原始对象，将从页面传过来的新值赋值给原始对象，并将原始对象再保存到数据库中 **/
			item2 = getCodeFragment(item.getId());
			if (item2 != null) {
				/*** 将页面上的新值逐一赋值，不在页面上的属性不要进行赋值 ***/
				item2.setCode(item.getCode());
				//item2.setCodeTemplate(item.getCodeTemplate());
				item2.setName(item.getName());
				item2.setOrdnum(item.getOrdnum());//更新顺序号
				/**end**/
			} else {
				item2 = item;
			}
		}else{ //item是新增加的对象
			item2 = item;
		}
		saveCodeFragment(item2, loginUserId);
		return item2;
	}
	
	/** 插入或修改 DAYU_CODE_TEMPLATE ，item中的所有属性都会更新到数据库中（包括属性值为null的，也会将null更新到数据库，覆盖之前的值）。
	 * @param item	要保存的对象
	 * @return void
	 * @throws Exception
	 * @author wanghua
	 */
	public void saveCodeFragment(CodeFragment item, String loginUserId) throws Exception{
		if (item == null){
			return;
		}
		/*** 下面开始对item对象进行校验，如逻辑关系等 ***/
		Assert.throwz(StringUtils.isNotBlank(item.getCode()),"编码不能为空");
		/*** 结束校验 ***/
		if (NumberUtil.isNullOrZero(item.getId())) {
			item.setId(null);
		} else {

		}
		item.setCode(item.getCode().toUpperCase());
		codeFragmentDao.saveCodeFragment(item);
	}
	
	public void updateCodeTemplate(Long id, String codeTemplate) throws Exception {
		CodeFragment item = codeFragmentDao.getCodeFragment(id);
		if(!StringUtils.equals(codeTemplate, item.getCodeTemplate())) {
			sysDataService.addClobLog(PojoManager.getTableName(CodeFragment.class), "", "CODE_TEMPLATE", id, item.getCodeTemplate(), codeTemplate, null);
		}
		codeFragmentDao.updateCodeTemplate(id, codeTemplate);
	}
	
	public void deleteCodeFragment(Long id) throws Exception {
		codeFragmentDao.deleteCodeFragment(id);
	}
	
	public List<CodeFragment> getAllCodeFragments() throws Exception{
		return codeFragmentDao.getAllCodeFragments();
	}
	
	@Autowired
	private CodeFragmentDao codeFragmentDao;
	
	@Autowired
	private SysDataService sysDataService;
}
